import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class StringUtilsService {

  constructor() { }

  /**
   * 多个单词组成的字符串将每个单词的首字母大写后返回
   * 首字母大写，每个间隔符号后的第一个字母大写
   * @param val 有固定间隔符号的多个单词构成的字符串
   * @param delimiter 间隔符号，可选参数，默认下划线
   */
  toUpperWords(val:string,delimiter?:string):string{
    // 默认为下划线
    if( delimiter === undefined || delimiter === null || delimiter.length <=0 )
      delimiter = '_';

    if( val === undefined || val === null || val.length <=0 )
      return '';

    let strArr:string[] = val.split(delimiter);
    if( strArr.length <=0 ) return '';

    let ret = '';
    strArr.forEach(ele => {
      ret = ret + ele.charAt(0).toUpperCase() + ele.slice(1);
    })

    return ret;
  }

  /**
   * 将MySQL表字段（带有下划线作为间隔符号）转换为 Java POJO类属性
   * 首字母小写，每个间隔符号后的第一个字母大写
   * @param val MySQL表字段，带有下划线作为单词间隔符号
   * @param delimiter 可选传入，默认为下划线
   */
  toPOJOAttribute(val:string,delimiter?:string):string{
    let ret = this.toUpperWords(val,delimiter);
    ret = ret.charAt(0).toLowerCase() + ret.slice(1);
    return ret;
  }

  /**
   * 如果字符串最后一个字符是间隔符号，那么将其删除
   * @param val 字符串
   * @param symbol 间隔符号
   */
  delLastSymbol(val:string,symbol:string):string{
    if( !val ) return '';
    if( !symbol ) return val;

    const last:string = val.substr(val.length-1,1);
    if( last === symbol ) return val.substr(0,val.length-1);
    return val;
  }

  toRealString(data:any):string{
    if( data === undefined ) return '';
    if( data === null ) return '';
    return data.toString();
  }
}
